home *** CD-ROM | disk | FTP | other *** search
/ Network CD 2 / Network CD - Volume 2.iso / programs / internet / tcp / amitcp / amitcp-src-22.lha / AmiTCP-2.2 / src / appl / napsaterm / mymap.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-07  |  10.9 KB  |  330 lines

  1. /*
  2.  * keymap.c --- a (Finnish) keymap for my taste
  3.  *
  4.  * Author: ppessi <Pekka.Pessi@hut.fi>
  5.  *
  6.  * Copyright © 1993 Pekka Pessi
  7.  *
  8.  * Created      : Fri Apr  2 01:13:20 1993 ppessi
  9.  * Last modified: Wed Jul 14 23:28:39 1993 ppessi
  10.  *
  11.  * Compile with gcc: gcc -o ss -nostdlib -DKEYMAPNAME=ss mymap.c 
  12.  * Compile with sc : sc resopt link to ss batch Nostartup stripdebug smalldata +
  13.  *                   DEF KEYMAPNAME=ss stringmerge data=FAR mymap.c
  14.  * DICE does not handle this kludge.
  15.  *
  16.  * When compiling you will get a gazillion of warnings. Ignore them.
  17.  *
  18.  * Note that KEYMAPNAME *MUST* be same as 
  19.  * the seglist file in devs:keymaps/ directory. 
  20.  */
  21.  
  22. #include <devices/keymap.h>
  23.  
  24. #ifndef KEYMAPNAME
  25. #define KEYMAPNAME "mymap"
  26. #endif
  27.  
  28. extern UBYTE KeyMapName[];
  29. extern UBYTE LoKeyMapTypes[64];
  30. extern ULONG LoKeyMap[64];
  31. extern UBYTE LoCapsable[8];
  32. extern UBYTE LoRepeatable[8];
  33. extern UBYTE HiKeyMapTypes[64];
  34. extern ULONG HiKeyMap[64];
  35. extern UBYTE HiCapsable[8];
  36. extern UBYTE HiRepeatable[8];
  37.  
  38. struct KeyMapNode s =
  39. {
  40.   { NULL, NULL, 0, 0, KeyMapName },
  41.   {
  42.     LoKeyMapTypes,
  43.     LoKeyMap,
  44.     LoCapsable,
  45.     LoRepeatable,
  46.     HiKeyMapTypes,
  47.     HiKeyMap,
  48.     HiCapsable,
  49.     HiRepeatable
  50.   }
  51. };
  52.  
  53. #define KCF_SHIFT_STRING KCF_STRING|KCF_SHIFT
  54. #define KCF_SHIFT_CONTROL KCF_SHIFT|KCF_CONTROL
  55. #define CSI "\233"
  56.  
  57. /* Notice byte sex */
  58. /* c1 == plain, c2 == shifted, c3 == alt, c4 == shift+alt */
  59. #define VANILJA(c1, c2, c3, c4) \
  60.   ((((c4)&0xff)<<24)|(((c3)&0xff)<<16)|(((c2)&0xff)<<8)|((c1)&0xff))
  61. /* Notice bit sex */
  62. #define BITS(b0, b1, b2, b3, b4, b5, b6, b7) \
  63.   (((b0)&1)<<0|((b1)&1)<<1|((b2)&1)<<2|((b3)&1)<<3| \
  64.    ((b4)&1)<<4|((b5)&1)<<5|((b6)&1)<<6|((b7)&1)<<7)
  65.  
  66. #define DEAD(name, d1, d2, c1, c2) \
  67.   static struct { char ded[8]; } name = \
  68.   { DPF_DEAD, d1, DPF_DEAD, d2, 0, c1, 0, c2 }
  69. #define ALTDEAD(name, d1, c, C) \
  70.   static struct { char ded[16]; } name = { 0, c, 0, C, DPF_DEAD, d1, DPF_DEAD, d1, \
  71.              0, c & 0x1f, 0, c & 0x1f, \
  72.              0, c & 0x1f | 0x80, 0, c & 0x1f | 0x80 }
  73. /* m and M are 6 chars long */
  74. #define ACCENTED(name, c, m, M, a, A) \
  75.   static struct { char normal[16]; char low[6]; char hi[6]; } \
  76.   name = {{ DPF_MOD, 16, DPF_MOD, 22, \
  77.        0, m, 0, M, 0, c & 0x1f, 0, c & 0x1f, \
  78.        0, c & 0x1f | 0x80, 0, c & 0x1f | 0x80 }, a , A }
  79.  
  80. #define strsize(s) (sizeof(s)-1)
  81.  
  82. #define STRING(name, len, s) \
  83.   static  struct { char offsets[2]; char st[len]; } \
  84.   name = { {len, 2}, s }
  85.  
  86. #define STRING_S(name, l, s, sl, ss) \
  87.   static struct { char offsets[4]; char st[l]; char sts[sl]; } \
  88.   name = { {l, 4, sl, 4+l }, s, ss }
  89.  
  90. #define STRING_SA(name, l, s, sl, ss, al, sa, asl, sas) \
  91.   static struct { char offsets[8]; \
  92.           char st[l]; char sts[sl]; char sta[al]; char stas[asl]; } \
  93.   name = { {l, 8, sl, 8+l, al, 8+l+sl, asl, 8+l+sl+al }, s, ss, sa, sas }
  94.  
  95. UBYTE LoKeyMapTypes[64] =
  96. {
  97.   /* `~       1!                 2"          3#   */
  98.   KC_VANILLA, KCF_SHIFT|KCF_ALT, KC_VANILLA, KCF_SHIFT|KCF_ALT,
  99.   /* 4$ 5% ; 6& ; 7/ */
  100.   KCF_SHIFT|KCF_ALT, KCF_SHIFT|KCF_ALT, KC_VANILLA, KCF_SHIFT|KCF_ALT,
  101.   /* 8( 9) 0= +? */
  102.   KCF_SHIFT|KCF_ALT, KCF_SHIFT|KCF_ALT, KCF_SHIFT|KCF_ALT, KC_VANILLA,
  103.   /* ´` \| nil p0 */
  104.   KCF_DEAD|KCF_SHIFT|KCF_ALT, KC_VANILLA, KCF_NOP, KC_NOQUAL,
  105.   /* qQ wW eE rR */
  106.   KC_VANILLA, KC_VANILLA, KCF_DEAD+KC_VANILLA, KC_VANILLA,
  107.   /* tT yY uU iI */
  108.   KC_VANILLA, KCF_DEAD|KC_VANILLA, KCF_DEAD|KC_VANILLA, KCF_DEAD|KC_VANILLA,
  109.   /* oO pP åÅ ¨^ */
  110.   KCF_DEAD|KC_VANILLA, KC_VANILLA, KC_VANILLA, KCF_DEAD|KC_VANILLA,
  111.   /* nil p1 p2 p3 */
  112.   KCF_NOP, KC_NOQUAL, KC_NOQUAL, KC_NOQUAL,
  113.   /* aA sS dD fF */
  114.   KCF_DEAD|KC_VANILLA, KC_VANILLA, KC_VANILLA, KCF_DEAD|KC_VANILLA,
  115.   /* gG hH jJ kK */
  116.   KCF_DEAD|KC_VANILLA, KCF_DEAD|KC_VANILLA,
  117.   KCF_DEAD|KC_VANILLA, KCF_DEAD|KC_VANILLA,
  118.   /* lL öÖ äÄ \'* */
  119.   KC_VANILLA, KCF_SHIFT|KCF_ALT, KCF_SHIFT|KCF_ALT, KCF_SHIFT_STRING|KCF_ALT,
  120.   /* nil p4 p5 p6 */
  121.   KCF_NOP, KC_NOQUAL, KC_NOQUAL, KC_NOQUAL,
  122.   /* <> zZ xX cC */
  123.   KC_VANILLA, KC_VANILLA, KC_VANILLA, KC_VANILLA,
  124.   /*  vV bB nN mM */
  125.   KC_VANILLA, KC_VANILLA, KCF_DEAD|KC_VANILLA, KC_VANILLA,
  126.   /* ,;     .: -_ nil */
  127.   KCF_SHIFT|KCF_ALT, KCF_SHIFT|KCF_ALT, KC_VANILLA, KCF_NOP,
  128.   /* p. p7 p8 p9 */
  129.   KC_NOQUAL, KC_NOQUAL, KC_NOQUAL, KC_NOQUAL
  130. };
  131.  
  132. /* Dead keys */
  133. DEAD(key0C, 1, 2, '=', '+'); /* ´` accents */
  134. DEAD(key1B, 5, 3, ']', '}'); /* ¨^ accents */
  135. ALTDEAD(key23, 1, 'f', 'F'); /* ´ */
  136. ALTDEAD(key24, 2, 'g', 'G'); /* ` */
  137. ALTDEAD(key25, 3, 'h', 'H'); /* ^ */
  138. ALTDEAD(key26, 4, 'j', 'J'); /* ~ */
  139. ALTDEAD(key27, 5, 'k', 'K'); /* ¨ */
  140.  
  141. /* Deadable keys */
  142. ACCENTED(key12, 'e', '©', '©', "eéèêeë", "EÉÈÊEË");
  143. ACCENTED(key15, 'y', '¤', '¥', "yýyyyÿ", "YÝYYYY");
  144. ACCENTED(key16, 'u', 'µ', 'µ', "uúùûuü", "UÚÙÛUÜ");
  145. ACCENTED(key17, 'i', '¡', '¦', "iíìîiï", "IÍÌÎIÏ");
  146. ACCENTED(key18, 'o', 'ø', 'Ø', "oóòôõö", "OÓÒÔÕÖ");
  147. ACCENTED(key20, 'a', 'æ', 'Æ', "aáàâãä", "AÁÀÂÃÄ");
  148. ACCENTED(key36, 'n', '­', '¯', "nnnnñn", "NNNNÑN");
  149. /* space bar, no alt, no control */
  150. struct { char mod[4]; char low[6]; } key40 =
  151. { { DPF_MOD, 4, 0, '\240'}, " ´`^~¨" };
  152. /* Special key for #? */
  153. STRING_SA(key2B, 1, "\'", 1, "*", 2, "#?", 2, "[]");
  154. /* String keys */
  155. STRING(key5F, 3, CSI"?~");         /* Help */
  156. STRING_S(key42, 1, "\t", 2, CSI"Z");    /* tabulator */
  157. /* Cursor keys */
  158. STRING_S(key4C, 2, CSI"A", 2, CSI"T"); /* up */
  159. STRING_S(key4D, 2, CSI"B", 2, CSI"S"); /* down */
  160. STRING_S(key4E, 2, CSI"C", 2, CSI"@"); /* right */
  161. STRING_S(key4F, 2, CSI"D", 2, CSI"A"); /* left */
  162. /* Function keys */
  163. STRING_S(key50, 3, CSI"0~", 4, CSI"10~");
  164. STRING_S(key51, 3, CSI"1~", 4, CSI"11~");
  165. STRING_S(key52, 3, CSI"2~", 4, CSI"12~");
  166. STRING_S(key53, 3, CSI"3~", 4, CSI"13~");
  167. STRING_S(key54, 3, CSI"4~", 4, CSI"14~");
  168. STRING_S(key55, 3, CSI"5~", 4, CSI"15~");
  169. STRING_S(key56, 3, CSI"6~", 4, CSI"16~");
  170. STRING_S(key57, 3, CSI"7~", 4, CSI"17~");
  171. STRING_S(key58, 3, CSI"8~", 4, CSI"18~");
  172. STRING_S(key59, 3, CSI"9~", 4, CSI"19~");
  173.  
  174. ULONG LoKeyMap[64] =
  175. {
  176.   VANILJA('`','~','`','~'), VANILJA('1','!','¹','¹'),
  177.   VANILJA('2','"','@','²'), VANILJA('3','#','³','³'),
  178.   VANILJA('4','$','¢','¤'), VANILJA('5','%','¼','%'),
  179.   VANILJA('6','&','½','^'), VANILJA('7','/','¾','&'),
  180.   VANILJA('8','(','·','*'), VANILJA('9',')','«','('),
  181.   VANILJA('0','=','»',')'), VANILJA('+','?','-','_'),
  182.   (ULONG)&key0C,            VANILJA('\\','|','\\','|'),
  183.   0,                       '0',
  184.   VANILJA('q','Q','å','Å'), VANILJA('w','W','°','°'),
  185.   (ULONG)&key12,            VANILJA('r','R','®','®'),
  186.   VANILJA('t','T','þ','Þ'), (ULONG)&key15, /* '¥¤Yy' */
  187.   (ULONG)&key16,            (ULONG)&key17,
  188.   (ULONG)&key18,            VANILJA('p','P','¶','¶'),
  189.   VANILJA('å','Å','[','{'), (ULONG)&key1B,
  190.   0L, '1', '2', '3',
  191.   (ULONG)&key20,            VANILJA('s','S','ß','§'),
  192.   VANILJA('d','D','ð','Ð'), (ULONG)&key23,
  193.   (ULONG)&key24, (ULONG)&key25, (ULONG)&key26, (ULONG)&key27,
  194.   VANILJA('l','L','£','£'), VANILJA('ö','Ö',';',':'),
  195.   VANILJA('ä','Ä','\'','"'), (ULONG)&key2B,
  196.   0, '4', '5', '6',
  197.   VANILJA('<','>','\\','|'),VANILJA('z','Z','±','¬'),
  198.   VANILJA('x','X','×','÷'), VANILJA('c','C','ç','Ç'),
  199.   VANILJA('v','V','ª','ª'), VANILJA('b','B','º','º'),
  200.   (ULONG)&key36,            VANILJA('m','M','¸','¿'),
  201.   VANILJA(',',';',',','<'), VANILJA('.',':','.','>'),
  202.   VANILJA('-','_','/','?'),  0L,
  203.   '.', '7', '8', '9'
  204. };
  205.  
  206. UBYTE LoCapsable[8] =
  207. {
  208.   /*    `  1  2  3  4  5  6  7 */
  209.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  210.   /*    8  9  0  + \´  \ NL p0 */
  211.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  212.   /*    q  w  e  r  t  y  u  i */
  213.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  214.   /*    o  p  å  ¨ NL p1 p2  3 */
  215.   BITS( 1, 1, 1, 0, 0, 0, 0, 0 ),
  216.   /*    a  s  d  f  g  h  j  k */
  217.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  218.   /*    l  ö  ä  ' NL p4 p5  6 */
  219.   BITS( 1, 1, 1, 0, 0, 0, 0, 0 ),
  220.   /*    <  z  x  c  v  b  n  m */
  221.   BITS( 0, 1, 1, 1, 1, 1, 1, 1 ),
  222.   /*    ,  .  - NL p. p7 p8  9 */
  223.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 )
  224. };
  225.  
  226. UBYTE LoRepeatable[8] =
  227. {
  228.   /*    `  1  2  3  4  5  6  7 */
  229.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  230.   /*    8  9  0  +  ´  \ NL  0 */
  231.   BITS( 1, 1, 1, 1, 1, 1, 0, 1 ),
  232.   /*    q  w  e  r  t  y  u  i */
  233.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  234.   /*    o  p  å  ¨ NL p1 p2  3 */
  235.   BITS( 1, 1, 1, 1, 0, 1, 1, 1 ),
  236.   /*    a  s  d  f  g  h  j  k */
  237.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  238.   /*    l  ö  ä  ' NL p4 p5  6 */
  239.   BITS( 1, 1, 1, 1, 0, 1, 1, 1 ),
  240.   /*    <  z  x  c  v  b  n  m */
  241.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  242.   /*    ,  .  - NL p. p7 p8  9 */
  243.   BITS( 1, 1, 1, 0, 1, 1, 1, 1 )
  244. };
  245.  
  246. UBYTE HiKeyMapTypes[64] =
  247. {
  248.   /* SPACE BACKSPACE TAB ENTER */
  249.   KCF_DEAD|KCF_ALT, KC_NOQUAL, KCF_SHIFT_STRING, KC_NOQUAL,
  250.   /* RETURN ESCAPE DELETE nil */
  251.   KCF_CONTROL, KCF_ALT, KCF_CONTROL, KCF_NOP,
  252.   /* nil nil p- nil */
  253.   KCF_NOP, KCF_NOP, KC_NOQUAL, KCF_NOP,
  254.   /* UP DOWN RIGHT LEFT  */
  255.   KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_STRING,
  256.   /* F1  F2 F3 F4 */
  257.   KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_STRING,
  258.   /* F5 F6 F7 F8 */
  259.   KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_STRING,
  260.   /* F9  F10 [{ ]} */
  261.   KCF_SHIFT_STRING, KCF_SHIFT_STRING, KCF_SHIFT_CONTROL, KCF_SHIFT_CONTROL,
  262.   /* p/ p* p+ HELP */
  263.   KC_NOQUAL, KC_NOQUAL, KC_NOQUAL, KCF_STRING,
  264.   /* Left Shift Right ShiCaps LockControl  ft  */
  265.   KCF_NOP, KCF_NOP, KCF_NOP, KCF_NOP,
  266.   /* Left Alt Right Alt Left AmigaRight Amiga  */
  267.   KCF_NOP, KCF_NOP, KCF_NOP, KCF_NOP,
  268.   /* Rest are all nils */
  269.   KCF_NOP, KCF_NOP, KCF_NOP, KCF_NOP,
  270.   KCF_NOP, KCF_NOP, KCF_NOP, KCF_NOP,
  271.   KCF_NOP, KCF_NOP, KCF_NOP, KCF_NOP,
  272.   KCF_NOP, KCF_NOP, KCF_NOP, KCF_NOP
  273. };
  274.  
  275. ULONG HiKeyMap[64] =
  276. {
  277.   (ULONG)&key40, VANILJA('\b',0,0,0), (ULONG)&key42, VANILJA('\r',0,0,0),
  278.   VANILJA('\r','\n',0,0), VANILJA('\033','\233', 0, 0), /* ESC CSI */
  279.   VANILJA('\177','\037',0,0), 0L,
  280.   0L, 0L, '-', 0L,
  281.   (ULONG)&key4C, (ULONG)&key4D, (ULONG)&key4E, (ULONG)&key4F,
  282.   (ULONG)&key50, (ULONG)&key51, (ULONG)&key52, (ULONG)&key53,
  283.   (ULONG)&key54, (ULONG)&key55, (ULONG)&key56, (ULONG)&key57,
  284.   (ULONG)&key58, (ULONG)&key59,
  285.   VANILJA('[','{', '\033', '\033'), VANILJA(']','}', '\035', '\035'),
  286.   '/', '*', '+', (ULONG)&key5F,
  287.   0, 0, 0, 0, 0, 0, 0, 0,
  288.   0, 0, 0, 0, 0, 0, 0, 0,
  289.   0, 0, 0, 0, 0, 0, 0, 0,
  290.   0, 0, 0, 0, 0, 0, 0, 0
  291. };
  292.  
  293. UBYTE HiRepeatable[8] =
  294. {
  295.   /*   SPCBS TabEntRetEscDel NA */
  296.   BITS( 1, 1, 1, 0, 0, 0, 1, 0 ),
  297.   /*   NA NA p- NA Up DwnRgtLft */
  298.   BITS( 0, 0, 1, 0, 1, 1, 1, 1 ),
  299.   /*   F1 F2 F3 F4 F5 F6 F7 F8 */
  300.   BITS( 1, 1, 1, 1, 1, 1, 1, 1 ),
  301.   /*   F9F10 p[ p] p/ p* p+ LP */
  302.   BITS( 1, 1, 0, 0, 0, 0, 0, 0 ),
  303.   /*   60          -        67 */
  304.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  305.   /*   68          -        6F */
  306.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  307.   /*   70          -        77 */
  308.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 )
  309. };
  310.  
  311. UBYTE HiCapsable[8] =
  312. {
  313.   /*   SPCBS TabEntRetEscDel NA */
  314.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  315.   /*   NA NA p- NA Up DwnRgtLft */
  316.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  317.   /*   F1 F2 F3 F4 F5 F6 F7 F8 */
  318.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  319.   /*   F9 F10p[Fp] p/ p* p+ LP*/
  320.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  321.   /*   60           -       67 */
  322.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  323.   /*   68           -       6F */
  324.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 ),
  325.   /*   70           -       77 */
  326.   BITS( 0, 0, 0, 0, 0, 0, 0, 0 )
  327. };
  328.  
  329. UBYTE KeyMapName[] = KEYMAPNAME;
  330.